/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.edu.itschapala.ssrp.bean;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.inject.Named;
import javax.enterprise.context.ApplicationScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.servlet.http.HttpServletRequest;
import mx.edu.itschapala.ssrp.ln.CatalogoLN;
import mx.edu.itschapala.ssrp.modelo.Usuario;

/**
 *
 * @author pello
 */
@Named(value = "usuarioBean")
@ApplicationScoped
public class UsuarioBean {

    public UsuarioBean() {
    }

    @EJB
    private CatalogoLN catalogoLN;

    private List<Usuario> usuarios;
    private Usuario usuario;
    private String accion;
    private boolean form;

    public List<Usuario> getUsuarios() {
        usuarios = new ArrayList<>();
        usuarios = catalogoLN.getUsuarios();
        return usuarios;
    }

    public void setUsuarios(List<Usuario> usuarios) {
        this.usuarios = usuarios;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public boolean isForm() {
        return form;
    }
    
    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public void prepararNuevo(ActionEvent ev) {
        usuario = new Usuario();
        accion = "nuevo";
        form=true;

    }

    public void prepararEditar(ActionEvent e) {

        int id = Integer.parseInt(e.getComponent().getClientId().split(":")[2]);
        usuario = usuarios.get(id);
        accion = "editar";
        if(usuario.getPerfil().equals("alumno")){form=true;}else{form=false;}
    }

    public void prepararEliminar(ActionEvent e) {

        int id = Integer.parseInt(e.getComponent().getClientId().split(":")[2]);
        usuario = usuarios.get(id);
        accion = "eliminar";
    }

    public String procesarAccion() {

        switch (accion) {
            case "editar":
                usuario.setNombre(usuario.getNombre().toUpperCase());
                catalogoLN.editarUsuario(usuario);

                break;
            case "nuevo":
                if (catalogoLN.getUsuarioPorID(usuario.getNcontrol()) == null) {
                    if (usuario.getPerfil().equals("alumno")) {
                        usuario.setNombre(usuario.getNombre().toUpperCase());
                        catalogoLN.crearUsuario(usuario);
                        mensajeUsuario(new FacesMessage(FacesMessage.SEVERITY_INFO, "USUARIO GUARDADO", "SE GUARDO CORRECTAMENTE EL USUARIO"));
                    } else {
                        switch(usuario.getPerfil()){
                            
                            case "division":
                                boolean s=false;
                                for(Usuario u : catalogoLN.getUsuarioPorTipo("division")){
                                    if(usuario.getAcademia().equals(u.getAcademia())){
                                       s=true; 
                                    }
                                }
                                if(!s){
                                    catalogoLN.crearUsuario(usuario);
                                    mensajeUsuario(new FacesMessage(FacesMessage.SEVERITY_INFO, "USUARIO GUARDADO", "SE GUARDO CORRECTAMENTE EL USUARIO"));
                                }else{
                                    mensajeUsuario(new FacesMessage(FacesMessage.SEVERITY_ERROR, "NO SE GUARDO EL USUARIO", "EL TIPO DE USUARIO YA EXISTE"));
                                }
                                
                                break;
                            case "academia":
                                boolean ss=false;
                                for(Usuario u : catalogoLN.getUsuarioPorTipo("academia")){
                                    if(usuario.getAcademia().equals(u.getAcademia())){
                                       s=true; 
                                    }
                                }
                                if(!ss){
                                    catalogoLN.crearUsuario(usuario);
                                    mensajeUsuario(new FacesMessage(FacesMessage.SEVERITY_INFO, "USUARIO GUARDADO", "SE GUARDO CORRECTAMENTE EL USUARIO"));
                                }else{
                                    mensajeUsuario(new FacesMessage(FacesMessage.SEVERITY_ERROR, "USUARIO SIN GUARDADO", "EL TIPO DE USUARIO YA EXISTE"));
                                }
                                break;
                            
                        }
                    }
                }else{
                    mensajeUsuario(new FacesMessage(FacesMessage.SEVERITY_ERROR, "USUARIO SIN GUARDADO", "EL USUARIO YA EXISTE"));
                }
                break;
            case "eliminar":
                if (usuario.getPerfil().equals("alumno")) {
                    catalogoLN.removerIntegranteResidencia(catalogoLN.getIntegranteResidenciaPorAlumno(usuario.getNcontrol()));
                }
                if (usuario.getPerfil().equals("docente")) {

                }
                catalogoLN.removerUsuario(usuario);
        }
        if (getUsuarioLog().getPerfil().equals("division")) {
            return "ListaUsuario";
        } else {

            return getDireccion();
        }
    }

    public String getTipoUsuario() {

        Usuario logueado = getUsuarioLog();
        if (logueado == null) {
            return " ";
        } else {
            return logueado.getPerfil();
        }

    }

    public String logout() {
        ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
        externalContext.getSessionMap().remove("USUARIO_LOGUEADO");
        mensajeUsuario(new FacesMessage(FacesMessage.SEVERITY_INFO, "Sesion cerrada", "se a cerrado la sesion"));
        return "indexLogin.xhtml?faces-redirect=true";
    }
    public void cambioPerdil(ValueChangeEvent e){
        String item=e.getNewValue().toString();
        if(item.equals("alumno")){
            form=true;
        }else{
            form=false;
        }
    }
    public void getUsuarioTC(ActionEvent e) {

        usuario = catalogoLN.getUsuarioPorID(getUsuarioLog().getNcontrol());
        accion = "editar";
    }

    public String getDireccion() {
        String destino = "indexLogin";
        switch (getTipoUsuario()) {
            case "vinculacion":
                destino = "indexVinculacion";
                break;
            case "division":
                destino = "indexDivision";
                break;
            case "docente":
                destino = "indexAsesor";
                break;
            case "alumno":
                destino = "indexAlumno";
                break;
            case "academia":
                destino = "indexAcademia";
                break;
            case "servicios":
                destino = "indexEscolares";
                break;
        }
        return destino;
    }

    public String prepararLog() {
        accion = "editar";
        usuario = getUsuarioLog();
        return "DatosUsuario";
    }

    public Usuario getUsuarioLog() {
        ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
        return (Usuario) externalContext.getSessionMap().get("USUARIO_LOGUEADO");
    }

    public String getValidacion() throws IOException {
        ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
        if (getUsuarioLog() == null) {

            HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
            String contextURL = request.getRequestURL().toString().replace(request.getRequestURI().substring(0), "") + request.getContextPath();

        } else {
            HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();

        }
        return " ";
    }

    public void logOutInactive() {
        if (getUsuarioLog() != null) {
            ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
            externalContext.getSessionMap().remove("USUARIO_LOGUEADO");

            try {
                externalContext.redirect("indexLogin.xhtml?faces-redirect=true");

            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }

    public void mensajeDatosUsuario() {
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "DATOS PERSONALES", "Actualizados"));
    }

    public void mensajeUsuario(FacesMessage msg) {
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }
}
